package com.hyper_yang._03_designpatterns.principles.demo2.before;

/**
 * projectName: com.hyper_yang._03_designpatterns.principles.demo2.before
 *
 * @author: sakiko
 * time: 2025/9/26 0:33
 * description: 测试 fixme: 违反里氏替换原则的经典案例
 * todo: 里氏代换原则: 任何基类出现的地方，子类一定可以出现。【继承父类而不去改变父类】
 * 通俗理解: 子类可以拓展父类的功能，但不能改变父类原有的功能。
 * note: 正方形不是长方形，需要重新设计接口
 */
public class Test {

    public static void main(String[] args) {
        Rectangle r = new Rectangle();
        r.setLength(20.0);
        r.setWidth(10.0);
        RectangleDemo.resize(r);
        RectangleDemo.printLengthAndWidth(r);

        System.out.println("========================");
        Square s = new Square();
        s.setLength(20.0);
        RectangleDemo.resize(s); // fixme: 因为正方形要保证长宽一致 所以会死循环
        RectangleDemo.printLengthAndWidth(s);

    }

}
